gcloud コマンドを Windows 上の PowerShell で実行すると 「can't find '__main__' module in ''」 というエラーが発生する (2022-11)
Google Cloud CLI をインストールして gcloud コマンド を PowerShell で実行したところ、エラーが発生した。
code:gcloud-on-powershell
PS > gcloud -v
C:\Users\xxxx\AppData\Local\Google\Cloud SDK\google-cloud-sdk\platform\bundledpython\python.exe: can't find '__main__' module in ''
インストール方法としては、winget を使う方法も、https://cloud.google.com/sdk/docs/install に沿った PowerShell コマンドを使う方法も試したが、どちらも同様だった。
gcloud.cmd コマンドは問題なく動作した。 バージョン情報は以下の通り。
code:gcloud.cmd
PS > gcloud.cmd -v
Google Cloud SDK 410.0.0
bq 2.0.81
core 2022.11.11
gcloud-crc32c 1.0.0
gsutil 5.16
どうも、gcloud.ps1 の中で、python.exe に渡す引数がおかしいっぽい。
C:\Users\xxx\AppData\Local\Google\Cloud SDK\google-cloud-sdk\bin\gcloud.ps1 に対して、以下のような変更を行うととりあえず動くようにはなった。
code:gcloud.ps1.diff
--- gcloud.ps1 2022-11-24 01:51:44.033534600 +0900
+++ gcloud.fixed.ps1 2022-11-24 01:51:18.693597400 +0900
@@ -110,6 +110,10 @@
}
$run_args_array += (Join-Path $cloudsdk_root_dir 'lib\gcloud.py')
$run_args_array += $args
+# 配列の先頭の要素が空文字列になることがあり、その場合に以下のようなエラーが発生する。
+# C:\Users\xxx\AppData\Local\Google\Cloud SDK\google-cloud-sdk\platform\bundledpython\python.exe: can't find '__main__' module in ''
+# 空文字列を配列から除くことで、このエラーを回避する。
+$run_args_array = $run_args_array -ne ""
if ($MyInvocation.ExpectingInput) {
$input | & "$cloudsdk_python" $run_args_array
https://www.googlecloudcommunity.com/gc/Developer-Tools/Executing-gcloud-command-on-PowerShell-may-fail-in-Windows/td-p/492303 にも書いた。